package modelInterfaces;

import model.Event;
import model.EventType;
import model.Object;
import model.Prediction;
import model.Project;
import model.Result;
import model.Subject;
import model.Test;
import model.Value;
import pluginInterfaces.IMetric;
import pluginInterfaces.setup.MetricSetup;

/**
 *	Create the Model Layer by according Abstract Factory pattern design
 * 
 */
public class ModelFactory extends AbstractModelFactory {

    /**
     * Get the model for {@link Event}
     * @return	interface of {@link Event}
     * @see IEvent
     */
	public IEvent getEvent() {
        return new Event();
    }

	
    /**
     * Get the model for {@link EventType}
     * @return 	interface of {@link EventType}
     * @see IEventType
     */
    public IEventType getEventType() {
        return new EventType();
    }

    
    /**
     * Get the model for {@link Value}
     * @return 	interface of {@link Value}
     * @see IValue
     */    
    public IValue getValue()
    {
        return new Value();
    }
    
    /**
     * Get the model for {@link User}
     * @return 	interface of {@link User}
     * @see IUser
     */    
	@Override
	public ISubject getUser() {
		return new Subject();
	}

	/**
     * Get the model for {@link Test}
     * @return 	interface of {@link Test}
     * @see ITest
     */    	
	@Override
	public ITest getTest() {
		return new Test();
	}
	
	/**
     * Get the model for {@link IResult}
     * @return 	interface of {@link Result}
     * @see IResult
     */    	
	@Override
	public IResult getResultMetric() {
		return new Result();
	}

	
	/**
     * Get the model for {@link Prediction}
     * @return 	interface of {@link Prediction}
     * @see IPrediction
     */    	
	@Override
	public IPrediction getPrediction() {
		return new Prediction();
	}

	
	/**
     * Get the model for {@link Object}
     * @return 	interface of {@link Object}
     * @see IObject
     */    	
	@Override
	public IObject getItem() {
		return new Object();
	}

	
	/**
     * Get the model for {@link Project}
     * @return 	interface of {@link Project}
     * @see IProject
     */    	
	@Override
	public IProject getProject() {
		return new Project();
	}

	
	/**
     * Get the model for {@link Metric}
     * @return 	interface of {@link Metric}
     * @see IMetric
     */    
	@Override
	public IMetric getMetricSetup() {
		return new MetricSetup();
	}

}
